/*!
 *  \file       SimpleRandomGenerator.hpp
 *  \brief      Definizione della classe \c SimpleRandomGenerator
 *  \author     Davide Scola <S2299453@studenti.unige.it>
 *  \author	Minetti Alberto <S3064777@studenti.unige.it>
 *  \version    1.0
 */

#ifndef _SIMPLE_RANDOM_GENERATOR_H
#define _SIMPLE_RANDOM_GENERATOR_H

/*!
 *  \brief      Definizione della classe \c SimpleRandomGenerator
 *
 */
template< typename tType >
class SimpleRandomGenerator : public IRandomGenerator< tType >
{
  public :
    SimpleRandomGenerator( IEntropyGenerator & );
    SimpleRandomGenerator( SimpleRandomGenerator< tType > const& );
    
    virtual SimpleRandomGenerator& operator=( const SimpleRandomGenerator& );
    
    virtual tType next();
    
  protected :
    IEntropyGenerator *entropy_;
};

// Idiomatic random generators
typedef SimpleRandomGenerator< unsigned int >	IntegerRandomGenerator;
typedef SimpleRandomGenerator< unsigned char >	ByteRandomGenerator;

#endif              /* _SIMPLE_RANDOM_GENERATOR_H */
